package com.ken.zeratul.dlock.annotation;

import java.lang.annotation.*;

/**
 * 分布式锁注解
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DLock {

    /**
     * 分布式锁名称前缀
     * @return
     */
    String prefix() default "";

    /**
     * 分布式锁名称，支持el表达式
     */
    String key();

    /**
     * 锁类型：
     *   - 重入锁
     *   - 公平锁
     * @return
     */
    DLockType lockType() default DLockType.REENTRANT_LOCK;

    /**
     * 是否为阻塞锁，默认阻塞
     * @return
     */
    boolean blocking() default true;

    /**
     * 非阻塞锁的降级方法，当获取不到锁时，调用同类下的该方法
     * @return
     */
    String fallback() default "fallback";

    /**
     * 非阻塞锁的过期时间，单位ms，默认为0，表示没有获得锁，则立刻调用降级方法
     * @return
     */
    int timeout() default 0;

    /**
     * 跳过加锁的条件，支持el表达式
     * @return
     */
    String nonLock() default "";
}
